package dados;

public class ArvoreNumMatrServico {
	private int numMatricula;
	private ArvoreNumMatrServico anterior;
	private ArvoreNumMatrServico posterior;
	private ArvoreDataSaidaServico arvore;	
	
	public ArvoreNumMatrServico(int numMatricula, ArvoreNumMatrServico anterior, 
			ArvoreNumMatrServico posterior, ArvoreDataSaidaServico arvore) {
		this.numMatricula = numMatricula;
		this.anterior = anterior;
		this.posterior = posterior;
		this.arvore = arvore;
	}
	public ArvoreNumMatrServico getAnterior() {
		return anterior;
	}
	public void setAnterior(ArvoreNumMatrServico anterior) {
		this.anterior = anterior;
	}
	public ArvoreDataSaidaServico getArvore() {
		return arvore;
	}
	public void setArvore(ArvoreDataSaidaServico arvore) {
		this.arvore = arvore;
	}
	public int getNumMatricula() {
		return numMatricula;
	}
	public void setNumMatricula(int numMatricula) {
		this.numMatricula = numMatricula;
	}
	public ArvoreNumMatrServico getPosterior() {
		return posterior;
	}
	public void setPosterior(ArvoreNumMatrServico posterior) {
		this.posterior = posterior;
	}
	public void adicionarArvoreConjugada(String dataSaida, int numAtendimento, int seqAtendimento, int posicao) {
		if (arvore.getDataSaida().equals(dataSaida)){
			arvore.adicionarArvoreConjugada(numAtendimento,seqAtendimento,posicao);
		} else if (arvore.getDataSaida().compareTo(dataSaida)>0){
			if (arvore.getAnterior()==null){
				arvore.setAnterior(new ArvoreDataSaidaServico(dataSaida,null,null,new ArvorePk(posicao,numAtendimento,seqAtendimento,null,null))); 
			} else {
				arvore.adicionarArvorePropria(arvore.getAnterior(),dataSaida,numAtendimento,seqAtendimento,posicao);
			}			
		} else {
			if (arvore.getPosterior()==null){
				arvore.setPosterior(new ArvoreDataSaidaServico(dataSaida,null,null,new ArvorePk(posicao,numAtendimento,seqAtendimento,null,null)));
			} else {
				arvore.adicionarArvorePropria(arvore.getPosterior(),dataSaida,numAtendimento,seqAtendimento,posicao);
			}
		}		
	}
	public void adicionarArvorePropria(ArvoreNumMatrServico anterior2, int numMatricula, String dataSaida, 
			int numAtendimento, int seqAtendimento, int posicao) {
		if (anterior2.getNumMatricula()==numMatricula){
			anterior2.adicionarArvoreConjugada(dataSaida,numAtendimento,seqAtendimento,posicao);
		} else if (anterior2.getNumMatricula()>numMatricula){
			if (anterior2.getAnterior()==null){
				anterior2.setAnterior(new ArvoreNumMatrServico(numMatricula,null,null,
						new ArvoreDataSaidaServico(dataSaida,null,null,new ArvorePk(posicao,numAtendimento,seqAtendimento,null,null)))); 
			} else {
				anterior2.adicionarArvorePropria(anterior2.getAnterior(),numMatricula,dataSaida,numAtendimento,seqAtendimento,posicao);
			}			
		} else {
			if (anterior2.getPosterior()==null){
				anterior2.setPosterior(new ArvoreNumMatrServico(numMatricula,null,null,
						new ArvoreDataSaidaServico(dataSaida,null,null,new ArvorePk(posicao,numAtendimento,seqAtendimento,null,null))));
			} else {
				anterior2.adicionarArvorePropria(anterior2.getPosterior(),numMatricula,dataSaida,numAtendimento,seqAtendimento,posicao);
			}
		}
		
	}
	
}
